import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False   # 用来正常显示负号

# 读取Excel文件
file_path = '2020年销售数据.xlsx'

# 读取数据
df = pd.read_excel(file_path, sheet_name='data')

# 确保销售日期是datetime类型
df['销售日期'] = pd.to_datetime(df['销售日期'])

# 提取月份信息
df['月份'] = df['销售日期'].dt.month

# 筛选京东和拼多多的数据
jd_data = df[df['销售渠道'] == '京东']
pdd_data = df[df['销售渠道'] == '拼多多']

# 按月份和渠道分组汇总销售数量
jd_monthly = jd_data.groupby('月份')['销售数量'].sum().reset_index()
pdd_monthly = pdd_data.groupby('月份')['销售数量'].sum().reset_index()

# 确保所有月份都有数据（1-12月）
all_months = pd.DataFrame({'月份': range(1, 13)})
jd_monthly = all_months.merge(jd_monthly, on='月份', how='left').fillna(0)
pdd_monthly = all_months.merge(pdd_monthly, on='月份', how='left').fillna(0)

# 创建图表
plt.figure(figsize=(14, 8))

# 设置柱状图的位置和宽度
x = np.arange(len(jd_monthly['月份']))  # 月份位置
width = 0.35  # 柱状图宽度

# 绘制柱状图
plt.bar(x - width/2, jd_monthly['销售数量'], width, label='京东', color='#e74c3c', alpha=0.8)
plt.bar(x + width/2, pdd_monthly['销售数量'], width, label='拼多多', color='#3498db', alpha=0.8)

# 设置图表标题和标签
plt.title('2020年京东和拼多多月度销售数量对比', fontsize=16, fontweight='bold', pad=20)
plt.xlabel('月份', fontsize=12)
plt.ylabel('销售数量', fontsize=12)

# 设置x轴标签
month_names = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
plt.xticks(x, month_names)

# 设置图例
plt.legend(fontsize=12)

# 设置网格
plt.grid(True, axis='y', alpha=0.3, linestyle='--')

# 在柱子上添加数值标签
for i, v in enumerate(jd_monthly['销售数量']):
    if v > 0:  # 只在有数据的柱子上添加标签
        plt.text(i - width/2, v + max(jd_monthly['销售数量'].max(), pdd_monthly['销售数量'].max())/100,
                 f'{v:,}', ha='center', va='bottom', fontsize=9, color='#e74c3c')

for i, v in enumerate(pdd_monthly['销售数量']):
    if v > 0:  # 只在有数据的柱子上添加标签
        plt.text(i + width/2, v + max(jd_monthly['销售数量'].max(), pdd_monthly['销售数量'].max())/100,
                 f'{v:,}', ha='center', va='bottom', fontsize=9, color='#3498db')

# 调整布局
plt.tight_layout()

# 显示图表
plt.show()

# 打印详细的统计信息
print("=" * 50)
print("月度销售数据统计:")
print("=" * 50)

print("\n京东月度销售:")
for i, row in jd_monthly.iterrows():
    print(f"  {month_names[i]}: {row['销售数量']:,}")

print(f"\n京东全年总销售数量: {jd_monthly['销售数量'].sum():,}")

print("\n拼多多月度销售:")
for i, row in pdd_monthly.iterrows():
    print(f"  {month_names[i]}: {row['销售数量']:,}")

print(f"\n拼多多全年总销售数量: {pdd_monthly['销售数量'].sum():,}")

# 计算各渠道占比
total_jd = jd_monthly['销售数量'].sum()
total_pdd = pdd_monthly['销售数量'].sum()
total_both = total_jd + total_pdd

print(f"\n渠道销售占比:")
print(f"  京东: {total_jd/total_both*100:.1f}%")
print(f"  拼多多: {total_pdd/total_both*100:.1f}%")

# 找出销售高峰月份
jd_peak_month = jd_monthly.loc[jd_monthly['销售数量'].idxmax(), '月份']
pdd_peak_month = pdd_monthly.loc[pdd_monthly['销售数量'].idxmax(), '月份']

print(f"\n京东销售高峰月份: {month_names[jd_peak_month-1]}")
print(f"拼多多销售高峰月份: {month_names[pdd_peak_month-1]}")